package book.oo;

/**
 * 三角形
 */
public class Triangle extends MyShape {
    private double sideA;//边a的长度
    private double sideB;//边b的长度
    private double sideC;//边c的长度
    public static final String SIDEERR="三角形的边长不能够小于0！";//边长错误
    public static final String SHAPEERR="三角形的二边之和必须大于第三边！";//不能构成三角形错误
    /**
     * 默认构造函数
     */
    public Triangle(){
        init();
    }
    /**
     * 用三条边构造一个三角形
     * @param a
     * @param b
     * @param c
     */
    public Triangle(double a,double b,double c){
        //如果给定的三条边能够构成三角形，便用给定的边构成三角形
        if(isTrianglelegal(a,b,c)){
            this.sideA=a;
            this.sideB=b;
            this.sideC=c;
        }else{
            init();//否则，不能构成三角形
        }
    }
    /**
     * 默认的三角形
     */
    private void init(){
        this.sideA=3;
        this.sideB=4;
        this.sideC=5;
    }
    /**
     * 判断三条边是否能够组成一个三角形
     * @param a
     * @param b
     * @param c
     * @return 布尔类型，如果能够组成三角形，便返回true，否则返回false
     */
    private boolean isTrianglelegal(double a,double b,double c){
        //三条边的长度必须大于0
        if((a<=0)||(a<=0)||(a<=0)){
            System.err.println(SIDEERR);
            return false;
        }else if((a+b)<c||(a+c)<b||(b+c)<a){
            //两边之和必须大于第三边
            System.err.println(SHAPEERR);
            return false;
        }
        return true;
    }
    public double getGirth(){
        return this.sideA+this.sideB+this.sideC;
    }
    public double getArea(){
        //根据海伦公式计算三角形的面积
        double s=(this.sideA+this.sideB+this.sideC)/2;
        return Math.sqrt(s*(s-this.sideA)*(s-this.sideB)*(s-this.sideC));
    }
    public String toString(){
        return "三角形名字是："+this.name+"，它的三条边的边长分别是："+this.sideA+this.sideB+this.sideC;
    }
    public double getSideA(){
        return this.sideA;
    }
    public void setSideA(double sideA){
        //在设置边长的时候，依然要检测采用新的边长后，是否能够组成三角形
        if(this.isTrianglelegal(sideA,this.sideB,this.sideC)){
            this.sideA=sideA;
        }
    }
    public double getSideB(){
        return this.sideB;
    }
    public void setSideB(double sideB){
        if(this.isTrianglelegal(this.sideA,sideB,this.sideC)){
            this.sideB=sideB;
        }
    }
    public double getSideC(){
        return this.sideC;
    }
    public void setSideC(double sideC){
        if(this.isTrianglelegal(this.sideA,this.sideB,sideC)){
            this.sideC=sideC;
        }
    }

    public static void main(String[] args) {
        Triangle test=new Triangle();
        //为三角形设置名字
        test.setName("myTriangle");
        System.out.println(test.toString());
        System.out.println("三角形的周长是："+test.getGirth());
        System.out.println("三角形的面积是："+test.getArea());
    }
}
